package com.mohunhun.interceptor;

import jakarta.annotation.Resource;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 拦截器配置类：用于注册自定义的登录拦截器
 */
@Configuration
public class AppInterceptorConfigurer implements WebMvcConfigurer {

    @Resource
    private LoginInterceptor loginInterceptor;

    /**
     * 添加拦截器到拦截器注册表中
     *
     * @param registry 拦截器注册表，用于注册和管理拦截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginInterceptor) // 注册自定义的登录状态拦截器
                .addPathPatterns("/**")           // 拦截所有请求路径（包括页面和 API）
                .excludePathPatterns(
                        // ========== 公开页面（无需登录）==========
                        "/sign-in.html",              // 登录页面
                        "/sign-up.html",              // 注册页面

                        // ========== 公开 API 接口（无需登录）==========
                        "/user/login",                // 用户登录接口
                        "/user/register",             // 用户注册接口
                        "/user/logout",               // 用户退出接口（退出操作本身不需要登录状态）

                        // ========== Swagger 接口文档相关（开发环境使用）==========
                        "/swagger*/**",               // Swagger UI 资源（如 /swagger-ui/index.html）
                        "/v3/api-docs/**",            // OpenAPI 3.0 规范文档接口
                        "/webjars/**",                // Swagger 依赖的静态资源（如 JS、CSS）
                        "/doc.html",                  // Knife4j 增强文档页面（如有使用）

                        // ========== 静态资源（浏览器自动请求或页面依赖）==========
                        "/dist/**",                   // 打包后的前端资源（如 Vue/React 构建产物）
                        "/js/**",                     // JavaScript 文件
                        "/css/**",                    // 样式文件
                        "/image/**",                  // 图片资源
                        "/fonts/**",                  // 字体文件
                        "/favicon.ico",               // 网站图标（浏览器自动请求）

                        // ========== 系统保留路径 ==========
                        "/error"                      // 防止未登录时访问非法路径，跳转到错误页又被拦截，造成死循环
                );

    }
}